#include<stdio.h>
#include<stdlib.h>//堆


int main()
{
    //申请堆上的空间可能会失败，返回空指针
//    int *p= (int *)malloc(4);
//     if(p==NULL)
//     {
//         printf("malloc 申请失败！\n");
//         return -1;
//     }
//     *p=20;
//     printf("%d\n",*p);
//     free(p);//释放堆上内存


//申请数组
// int *p=(int *)malloc(sizeof(int)*10);
// if(p==NULL)
//     {
//         printf("malloc 申请失败！\n");
//         return -1;
//     }
// for(int i=0;i<10;i++)
// {
//         p[i]=i+1;
//         print("%d ",p[i]);
// }
// printf("\n");
// free(p);



//二维数组
//申请两行三列
int** p=(int**)malloc(sizeof(int*)*2);
if(p==NULL)
    {
        printf("malloc 申请失败！\n");
        return -1;
    }
for(int i=0;i<2;i++)
{
    p[i]=(int *)malloc(sizeof(int)*3);
    if(p[i]==NULL)
    {
        printf("malloc 申请失败！\n");
        return -1;
    }
}
for(int i=0;i<2;i++)
{
    for(int j=0;j<3;j++)
       {
        p[i][j]=i*3+j+1;
       }
}
for(int i=0;i<2;i++)
{
    for(int j=0;j<3;j++)
       {
        printf("%d ",p[i][j]);
       }
       printf("\n");
}
for(int i=0;i<2;i++)
{
    free(p[i]);

}
free(p);


    return 0;
}
